#pragma once

#include "DLDataRange.hpp"
#include "DLOperatorTerm.hpp"
#include "OperatorNames.hpp"

namespace terms {
	namespace dl {
		template <typename Term, typename L=std::string, typename I=std::string, typename C=std::string, typename R=std::string>
		class DLDataNegation
			: public virtual DLDataRange<L, I, C, R>, 
			public virtual DLOperatorTerm<DLDataRange<L, I, C, R>>
		{
		public:
			DLDataNegation(const DLDataRange<L, I, C, R> *term)
				: DLOperatorTerm<DLDataRange<L, I, C, R>>({term})
			{
			}

		public:
			virtual const char *
			get_operator_name()
			{
				return OperatorNames::NEGATION;
			}

		public:
			virtual DLTermOrder
			get_type_order() const
			{
				return DLTermOrder::DATA_NEGATION;
			}
		};
	}
}
